<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    
  </style>
</head>
<body>
  
</body>
<script>

  // 计算阶乘
  // 5! = 5 * 4 * 3 * 2 * 1

  // 函数表示一个功能

  // 封装一个函数，用来计算阶乘
  // 假设这个函数叫fn
  // fn(5) = 5 * 4 * 3 * 2 * 1
  //         5 * fn(4) = 4 * 3 * 2 * 1
  //                     4 * fn(3) = 3 * 2 * 1
  //                                 3 * fn(2) = 2 * 1
  //                                             2 * fn(1) = 1

  // fn(5) = 5 * fn(4)
  // fn(4) = 4 * fn(3)
  // fn(3) = 3 * fn(2)
  // fn(2) = 2 * fn(1)
  // fn(n) = n * fn(n-1)
  // fn(1) = 1

  // function fn(n){
  //   if(n === 1){
  //     return 1;
  //   }else{
  //     return n * fn(n-1);
  //   }
  // }
  // console.log( fn(10) );

  // ======

  // 递归：电影院找座位

  // 斐波那契数列
  // 1，1，2，3，5，8，13，21，...
  // 封装函数，计算第n位，是多少
  // 假设有一个函数，可以实现需求fn
  // fn(5) = fn(4) + fn(3)
  // fn(4) = fn(3) + fn(2)
  // fn(3) = fn(2) + fn(1)
  // fn(2) = 1
  // fn(1) = 1

  // fn(n) = fn(n-1) + fn(n-2)

  // function fn( n ){
  //   if(n === 1 || n === 2){
  //     return 1;
  //   }else{
  //     return fn(n-1) + fn(n-2)
  //   }
  // }
  // console.log(fn(20));

  // =======

  // 约数：能被整除的数字
  // 公约数：能同时被两个数字整除的数字
  // 最大公约数：能同时被两个数字整除的数字中最大的那个

  // 36:1, 2, 3, 4, 6, 9, 12, 18, 36
  // 24:1, 2, 3, 4, 6, 8, 12, 24
  // 1, 2, 3, 4, 6, 12
  // 12


  // 不断将这两个数字取余，如果余数为0，除数即最大公约数
  // 如果余数不为0，将上次的除数作为被除数，将这个部位0的余数作为除数，继续取余


  // 36和24的最大公约数

  // 36 % 24 === 12
  // 24 % 12 === 0

  // n,m的最大公约数
  // var r = n % m;
  // if(r === 0){
  //   return m;
  // }else{
  //   r2 = m * r
  //   if(r2 === 0){
  //     return r
  //   }else{
  //     r3 = r % r2
  //     ...
  //   }
  // }


  // function fn(n, m){
  //   var r = n % m;
  //   if(r === 0){
  //     return m;
  //   }else{
  //     return fn( m, r );
  //   }
  // }
  // console.log( fn(24, 36) );


  // 如果是偶数，计算：1/2 + 1/4 + 1/6 + ... + 1/n
  // 如果是奇数，计算：1/1 + 1/3 + 1/5 + ... + 1/n

  // 假设有一个函数用来完成需求:fn

  // 偶数
  // fn(6) = 1/6 + 1/4 + 1/2
  // fn(4) = 1/4 + 1/2
  // fn(2) = 1/2

  // fn(n) = 1/n + fn(n-2)
  // fn(2) = 1/2

  // 奇数：
  // fn(7) = 1/7 + 1/5 + 1/3 + 1/1
  // fn(5) = 1/5 + 1/3 + 1/1
  // fn(3) = 1/3 + 1/1
  // fn(1) = 1/1

  // fn(n) = 1/n + fn(n-2)
  // fn(1) = 1/1

  function fn( n ){
    if(n===1){
      return 1;
    }
    if(n===2){
      return 1/2;
    }
    return 1/n + fn(n-2);
  }
  console.log(fn(6));


  function fn2(n){
    if(n%2 === 0){
      var i=2;
    }else{
      var i=1;
    }
    var sum = 0;
    for(;i<=n;i+=2){
      sum += 1/i
    }
    return sum;
  }
  console.log(fn2(6));

</script>
</html>